home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 19
/
Aminet 19 (1997)(GTI - Schatztruhe)[!][Jun 1997].iso
/
Aminet
/
demo
/
mag
/
trash3_2.lha
/
fuentes
/
FuentesFXC2P.lha
/
FXC2P.LineaBresenham
< prev
next >
Wrap
Text File
|
1980-01-14
|
5KB
|
256 lines
* FX_Linea
* Rutina de lineas mediante el algoritmo de Bresenham
* Enteramente programada por Xele/Odrusba
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
; PIX.B = Color con el que se quiere pintar | Esquema de 5 4 3
; d0.W , d1.W = X1 , Y1 | los 8 tipos \ | /
; d2.W , d3.W = X2 , Y2 | de línea: 6 ---·--- 2
; A5.L = *Buffer Chunky | / | \
; | 7 0 1
;¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
FX_Linea ;SUBRUTINA
;////////////////////////////////////////////// Determinar Tipo de Línea
cmp.w d0,d2
beq.s .Tipos_0_4 ;x2 = x1 ?
bgt.s .Tipos_1_2_3 ;x2 > x1 ?
bra.s .Tipos_5_6_7 ;x2 < x1
.Tipos_0_4 ;********************************
cmp.w d1,d3
bgt.s .Tipo_0 ;y2 > y1 ?
; bra.s .Tipo_4 ;y2 =< y1
.Tipo_4 ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 4
exg d1,d3
.Tipo_0 ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 0
movem.l d6/d7/a5,-(sp)
move.w d3,d6
sub.w d1,d6 ;D6 = DeltaY
moveq #0,d7
move.w d6,d7
.Bucle0
bsr FX_Punto
add.w #1,d1
dbra d7,.Bucle0
Movem.l (sp)+,d6/d7/a5
rts
.Tipos_5_6_7 ;********************************
exg d0,d2
exg d1,d3
.Tipos_1_2_3 ;********************************
cmp.w d1,d3
bgt .Tipo_1 ;y2 > y1 ?
beq .Tipo_2 ;y2 = y1 ?
; bra .Tipo_3 ;y2 < y1
.Tipo_3 ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 3
Movem.l d5-d7/a5,-(sp)
move.w d2,d5
sub.w d0,d5 ;D5 = DeltaX
move.w d1,d6
sub.w d3,d6 ;D6 = DeltaY
cmp.w d6,d5 ;DeltaX > DeltaY ?
bgt .Tipo3_A ;DeltaX Mayor
beq .Tipo3_B ;Deltas iguales
; bra.s .Tipo3_C ;DeltaY Mayor
.Tipo3_C ;--------------------------------
move.w d5,d2
lsl.w #1,d2
sub.w d6,d2 ;d2 = (2 * DeltaX) - DeltaY
moveq #0,d7
move.w d6,d7
.Bucle3C
bsr FX_Punto
tst.w d2
bgt .IncX3C
.NoIncX3C
move.w d5,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + (2 * Delta X)
bra.s .Sigue3C
.IncX3C
move.w d5,d3
sub.w d6,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + 2 * (DeltaX - DeltaY)
add.w #1,d0 ;x1 = x1 + 1
.Sigue3C
sub.w #1,d1 ;y1 = y1 + 1
dbra d7,.Bucle3C
Movem.l (sp)+,d5-d7/a5
rts
.Tipo3_B ;--------------------------------
moveq #0,d7
move.w d5,d7
.Bucle3B
bsr FX_Punto
add.w #1,d0
sub.w #1,d1
dbra d7,.Bucle3B
Movem.l (sp)+,d5-d7/a5
rts
.Tipo3_A ;--------------------------------
move.w d6,d2
lsl.w #1,d2
sub.w d5,d2 ;d2 = (2 * DeltaY) - DeltaX
moveq #0,d7
move.w d5,d7
.Bucle3A
bsr FX_Punto
tst.w d2
bgt .IncY3A
.NoIncY3A
move.w d6,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + (2 * Delta Y)
bra.s .Sigue3A
.IncY3A
move.w d6,d3
sub.w d5,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + 2 * (DeltaY - DeltaX)
sub.w #1,d1 ;y1 = y1 + 1
.Sigue3A
add.w #1,d0 ;x1 = x1 + 1
dbra d7,.Bucle3A
Movem.l (sp)+,d5-d7/a5
rts
.Tipo_2 ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 2
movem.l d5/d7/a5,-(sp)
move.w d2,d5
sub.w d0,d5 ;D5 = DeltaX
moveq #0,d7
move.w d5,d7
.Bucle2
bsr FX_Punto
add.w #1,d0
dbra d7,.Bucle2
Movem.l (sp)+,d5/d7/a5
rts
.Tipo_1 ;>>>>>>>>>>>>>>>>>>>>>>>> Tipo 1
Movem.l d5-d7/a5,-(sp)
move.w d2,d5
sub.w d0,d5 ;D5 = DeltaX
move.w d3,d6
sub.w d1,d6 ;D6 = DeltaY
cmp.w d6,d5 ;DeltaX > DeltaY ?
bgt .Tipo1_A ;DeltaX Mayor
beq .Tipo1_B ;Deltas iguales
; bra.s .Tipo1_C ;DeltaY Mayor
.Tipo1_C ;--------------------------------
move.w d5,d2
lsl.w #1,d2
sub.w d6,d2 ;d2 = (2 * DeltaX) - DeltaY
moveq #0,d7
move.w d6,d7
.Bucle1C
bsr FX_Punto
tst.w d2
bgt .IncX1C
.NoIncX1C
move.w d5,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + (2 * Delta X)
bra.s .Sigue1C
.IncX1C
move.w d5,d3
sub.w d6,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + 2 * (DeltaX - DeltaY)
add.w #1,d0 ;x1 = x1 + 1
.Sigue1C
add.w #1,d1 ;y1 = y1 + 1
dbra d7,.Bucle1C
Movem.l (sp)+,d5-d7/a5
rts
.Tipo1_B ;--------------------------------
moveq #0,d7
move.w d5,d7
.Bucle1B
bsr FX_Punto
add.w #1,d0
add.w #1,d1
dbra d7,.Bucle1B
Movem.l (sp)+,d5-d7/a5
rts
.Tipo1_A ;--------------------------------
move.w d6,d2
lsl.w #1,d2
sub.w d5,d2 ;d2 = (2 * DeltaY) - DeltaX
moveq #0,d7
move.w d5,d7
.Bucle1A
bsr FX_Punto
tst.w d2
bgt .IncY1A
.NoIncY1A
move.w d6,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + (2 * Delta Y)
bra.s .Sigue1A
.IncY1A
move.w d6,d3
sub.w d5,d3
lsl.w #1,d3
add.w d3,d2 ;d2 = d2 + 2 * (DeltaY - DeltaX)
add.w #1,d1 ;y1 = y1 + 1
.Sigue1A
add.w #1,d0 ;x1 = x1 + 1
dbra d7,.Bucle1A
Movem.l (sp)+,d5-d7/a5
rts
;FINSUB